"""
Python 字典（dict）是一种无序的、可变的序列，它的元素以“键值对（key-value）”的形式存储。
相对地，列表（list）和元组（tuple）都是有序的序列，它们的元素在底层是挨着存放的。
"""
['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__',
 '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__',
 '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__',
 '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__',
 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values']

#创建
#方式1
demo = [('two',2), ('one',1), ('three',3)]
a = dict(demo)
#方式2
keys = ['one', 'two', 'three'] #还可以是字符串或元组
values = [1, 2, 3] #还可以是字符串或元组
a= dict( zip(keys, values) )

#初始化
knowledge = ['语文', '数学', '英语']
scores = dict.fromkeys(knowledge, 60)#初始化默认值
print(scores)

#查找
a = dict(two=0.65, one=88, three=100, four=-59)
print(a.get('one'))

#添加
a = {'数学':95}
print(a)

#修改
a['数学'] = 100
print(a)

#删除
#dict.pop()#删除指定key值
#dict.popitem()#随机删除一个

a = {'数学': 95, '语文': 89, '英语': 90}
print(a)
# key不存在，指定默认值
a.setdefault('物理', 94)
print(a)
# key不存在，不指定默认值
a.setdefault('化学')
print(a)
# key存在，指定默认值
a.setdefault('数学', 100)
print(a)

# 判断 a 是否包含名为'物理'的key
print('物理' in a) # False

a = {'数学': 95, '语文': 89, '英语': 90}
for k in a.keys():
    print(k, end=' ')
print("\n---------------")
for v in a.values():
    print(v, end=' ')
print("\n---------------")
for k, v in a.items():
    print("key:", k, " value:", v)


a = {'one': 1, 'two': 2, 'three': [1,2,3]}
b = a.copy()
#向 a 中添加新键值对，由于b已经提前将 a 所有键值对都深拷贝过来，因此 a 添加新键值对，不会影响 b。
a['four']=100
print(a)
print(b)
#由于 b 和 a 共享[1,2,3]（浅拷贝），因此移除 a 中列表中的元素，也会影响 b。
a['three'].remove(1)
print(a)
print(b)

temp = '教程是： %(name)s, 价格是：%(price).2f'
course = {'name':'python教程','price':9.9}
print(temp % course)

print(dir(dict))